CC			= g++
CFLAGS		= -g -O3 -pg

#Raytracer: Raytracer.cpp parser.o object.o scene.h
#	g++ -g -O3 Raytracer.cpp parser.o object.o Image.cpp -o raytrace -pg

Raytracer:
	g++ -g -pg -O3 Raytracer.cpp Token.cpp Parser.cpp Object.cpp Light.cpp \
	   	Camera.cpp Geometry.cpp Sphere.cpp Plane.cpp Triangle.cpp Cone.cpp \
		Box.cpp Finish.cpp Pigment.cpp Image.cpp AABB.cpp Texture2.cpp -o raytrace

parser.o: Parser.cpp token.o
	$(CC) $(CFLAGS) -c Parser.cpp token.o -o parser.o

object.o: camera.o light.o geometry.o finish.o pigment.o token.o Ray.h
	$(CC) $(CFLAGS) -c Object.cpp token.o finish.o pigment.o \
	   	camera.o geometry.o -o object.o

token.o: Token.cpp Token.h
	$(CC) $(CFLAGS) -c Token.cpp -o token.o
	
camera.o: Camera.cpp Camera.h token.o
	$(CC) $(CFLAGS) -c Camera.cpp token.o -o camera.o

light.o: Light.cpp Light.h token.o
	$(CC) $(CFLAGS) -c Light.cpp token.o -o light.o

geometry.o: Geometry.cpp Geometry.h sphere.o box.o plane.o token.o \
	triangle.o cone.o
	$(CC) $(CFLAGS) -c Geometry.cpp token.o sphere.o box.o plane.o triangle.o \
		cone.o -o geometry.o

sphere.o: Sphere.cpp Sphere.h token.o
	$(CC) $(CFLAGS) -c Sphere.cpp token.o -o sphere.o

box.o: Box.cpp Box.h token.o
	$(CC) $(CFLAGS) -c Box.cpp token.o -o box.o

plane.o: Plane.cpp Plane.h token.o
	$(CC) $(CFLAGS) -c Plane.cpp token.o -o plane.o

triangle.o: Triangle.cpp Triangle.h token.o
	$(CC) $(CFLAGS) -c Triangle.cpp token.o -o triangle.o

cone.o: Cone.cpp Cone.h token.o
	$(CC) $(CFLAGS) -c Cone.cpp token.o -o cone.o

finish.o: Finish.cpp Finish.h token.o
	$(CC) $(CFLAGS) -c Finish.cpp token.o -o finish.o

pigment.o: Pigment.cpp Pigment.h token.o
	$(CC) $(CFLAGS) -c Pigment.cpp token.o -o pigment.o

clean:
	-rm -f *.tga photos/*.tga raytrace test.out *.o
